home *** CD-ROM | disk | FTP | other *** search
/ World of Amiga / World of Amiga.iso / archive / assembly / dwfilter.lha / DWfilter.s < prev    next >
Text File  |  1994-06-05  |  5KB  |  330 lines

  1.  
  2.     Section    Test,code
  3.     output    ram:DWfilter
  4.     
  5.     opt    d+
  6.     incdir    "dh0:Data/docs/include_3/"
  7.     include    dos/dos_lib.i
  8.     include    exec/execbase.i
  9.     include    libraries/gadtools.i
  10.     include    libraries/gadtools_lib.i
  11.     include    utility/tagitem.i
  12.  
  13.  
  14.     incdir    dh0:include/
  15.     include    system
  16.  
  17. _LVOLockPubScreen    EQU    -510
  18. _LVOUnlockPubScreen    EQU    -516
  19. _LVOOpenWindowTagList    EQU    -606
  20.  
  21. ME_Lock        =0
  22. ME_FIB        =4
  23. ME_Temp        =8
  24. ME_OldExamine    =12
  25. ME_OldExNext    =16
  26. ME_DOSBase        =20
  27.  
  28. CALLGAD    MACRO
  29.     move.l    _GadToolsBase,a6
  30.     jsr    _LVO\1(a6)    
  31.     ENDM
  32.     
  33. Start:    Lea    GFXName,A1
  34.     Moveq    #0,D0
  35.     CALLEXEC    OpenLibrary
  36.     Move.l     D0,_GfxBase
  37.     Beq    Error
  38.  
  39.     Lea    DosName,A1
  40.     Moveq    #0,D0
  41.     CALLEXEC    OpenLibrary
  42.     Move.l     D0,_DOSBase
  43.     Beq    Error
  44.  
  45.     Lea    IntName,A1
  46.     Moveq    #0,D0
  47.     CALLEXEC    OpenLibrary
  48.     Move.l    D0,_IntuitionBase
  49.     Beq    Error
  50.  
  51.     Lea    GadToolsName,A1
  52.     Moveq    #0,D0
  53.     CALLEXEC    OpenLibrary
  54.     Move.l    D0,_GadToolsBase
  55.     Beq    Error
  56.  
  57.     bsr    RemoveOldExam
  58.  
  59.     bsr    GetLine
  60.     cmp.l    #$80000000,Pat_Dest
  61.     beq    .quit
  62.  
  63.     bsr    InstallNewExam
  64.         
  65. .quit    Move.l    _GadToolsBase,A1
  66.     CALLEXEC    CloseLibrary
  67.  
  68.     Move.l    _IntuitionBase,A1
  69.     CALLEXEC    CloseLibrary
  70.  
  71.     Move.l    _DOSBase,A1
  72.     CALLEXEC    CloseLibrary
  73.  
  74.     Move.l    _GfxBase,A1
  75.     CALLEXEC    CloseLibrary
  76.  
  77. Error:    moveq.l    #0,d0
  78.     rts
  79.  
  80.     *-------------------------------------------------*
  81.  
  82. RemoveOldExam:
  83.  
  84.     move.l    _DOSBase,a6
  85.     lea    _LVOExamine(a6),a0
  86.     move.l    2(a0),a1
  87.     sub.l    #My_Examine-MemID,a1
  88.     cmp.l    #"DWPt",(a1)
  89.     bne    .exit
  90.     
  91.     Lea    TempBuf-MemID(a1),a2
  92.     move.l    ME_OldExamine(a2),2(a0)
  93.     lea    _LVOExNext(a6),a0
  94.     move.l    ME_OldExNext(a2),2(a0)
  95.  
  96.     lea    Pat_Src-MemID(a1),a2
  97.     lea    Gadget00String,a3
  98. .copy    move.b    (a2)+,(a3)+
  99.     tst.b    -1(a2)
  100.     bne    .copy
  101.     
  102. .exit    rts
  103.  
  104.     *-------------------------------------------------*
  105.  
  106.  
  107. InstallNewExam:
  108.  
  109.     CALLEXEC    Disable
  110.  
  111.     Lea    MemID,a4
  112.     Lea    TempBuf,a5
  113.     move.l    8(a4),d0
  114.     move.l    #$10001,d1
  115.     CALLEXEC    AllocMem
  116.     move.l    d0,4(a4)
  117.         
  118.     move.l    _DOSBase,a6
  119.     move.l    a6,ME_DOSBase(a5)
  120.     
  121.     move.l    _DOSBase,a6
  122.     lea    _LVOExamine(a6),a0
  123.     move.l    2(a0),ME_OldExamine(a5)
  124.     move.l    4(a4),d0
  125.     add.l    #My_Examine-MemID,d0
  126.     move.l    d0,2(a0)
  127.     
  128.     lea    _LVOExNext(a6),a0
  129.     move.l    2(a0),ME_OldExNext(a5)
  130.     move.l    4(a4),d0
  131.     add.l    #My_ExNext-MemID,d0
  132.     move.l    d0,2(a0)
  133.     
  134.     move.l    a4,a0
  135.     move.l    4(a4),a1
  136.     move.l    8(a4),d0
  137. .copy    move.b    (a0)+,(a1)+
  138.     sub.l    #1,d0
  139.     bne    .copy
  140.  
  141.     CALLEXEC    Enable
  142.     
  143.     rts
  144.         
  145.     *-------------------------------------------------*
  146.  
  147.     opt    p+
  148.  
  149. MemID:    dc.l    "DWPt"
  150.     dc.l    0
  151.     dc.l    MemEnd-MemID
  152.     
  153. My_Examine:    movem.l    a0-a6,-(a7)
  154.     Lea    TempBuf(pc),a1
  155.     move.l    d1,ME_Lock(a1)
  156.     move.l    d2,ME_FIB(a1)
  157.     move.l    #0,ME_Temp(a1)
  158.  
  159. .file    move.l    ME_OldExamine(a1),a0
  160.     jsr    (a0)
  161.     tst.l    d0
  162.     beq    .err
  163.  
  164.     Lea    TempBuf(pc),a1
  165.     move.l    ME_FIB(a1),a0
  166.     tst.l    fib_DirEntryType(a0)
  167.     bpl    .err
  168.     bsr    TestFSP
  169.     beq    .err
  170.  
  171.     move.l    4,a6
  172.     move.l    ThisTask(a6),a0
  173.     move.l    LN_NAME(a0),a0
  174.     cmp.l    #"DW P",(a0)
  175.     bne    .err
  176.  
  177.     move.l    ME_FIB(a1),a0
  178.     move.l    fib_DiskKey(a0),d2
  179.     
  180.     tst.l    ME_Temp(a1)
  181.     beq    .first
  182.  
  183.     cmp.l    ME_Temp(a1),d2
  184.     beq    .err
  185. .first    move.l    d2,ME_Temp(a1)
  186.     
  187.     move.l    ME_Lock(a1),d1
  188.     move.l    ME_FIB(a1),d2
  189.     bra    .file
  190.     
  191. .err    movem.l    (a7)+,a0-a6
  192.     rts
  193.  
  194.     *-------------------------------------------------*
  195.  
  196. My_ExNext:    movem.l    a0-a6,-(a7)
  197.     Lea    TempBuf(pc),a1
  198.     move.l    d1,ME_Lock(a1)
  199.     move.l    d2,ME_FIB(a1)
  200.     
  201. .file    move.l    ME_Lock(a1),d1
  202.     move.l    ME_FIB(a1),d2
  203.     move.l    ME_OldExNext(a1),a0
  204.     jsr    (a0)
  205.     tst.l    d0
  206.     beq    .err
  207.  
  208.     move.l    4,a6
  209.     move.l    ThisTask(a6),a0
  210.     move.l    LN_NAME(a0),a0
  211.     cmp.l    #"DW P",(a0)
  212.     bne    .err
  213.     
  214.     Lea    TempBuf(pc),a1
  215.     move.l    ME_FIB(a1),a0
  216.     tst.l    fib_DirEntryType(a0)
  217.     bpl    .err
  218.     bsr    TestFSP
  219.     beq    .file
  220.         
  221. .err    movem.l    (a7)+,a0-a6
  222.     rts
  223.     
  224.     *-------------------------------------------------*
  225.  
  226. TestFSP:    movem.l    d0/d2-d7/a1-a6,-(a7)
  227.     move.l    ME_FIB(a1),a0
  228.     lea    fib_FileName(a0),a0
  229.     move.l    a0,d2
  230.     lea    Pat_Dest(pc),a2
  231.     move.l    a2,d1
  232.         
  233.     move.l    ME_DOSBase(a1),a6
  234.     jsr    _LVOMatchPatternNoCase(a6)
  235.     move.l    d0,d1
  236.     movem.l    (a7)+,d0/d2-d7/a1-a6        
  237.     tst.l    d1
  238.     rts
  239.  
  240. TempBuf:    dc.l    0    ;ME_Lock
  241.     dc.l    0    ;ME_FIB
  242.     dc.l    0    ;ME_Temp
  243.     dc.l    0    ;ME_OldExamine
  244.     dc.l    0    ;ME_OldExNext
  245.     dc.l    0    ;ME_DOSBase
  246.  
  247. Pat_Dest:    ds.b    256
  248. Pat_Src:    ds.b    256
  249.     
  250. MemEnd:    
  251.     opt    p-
  252.         
  253.     *-------------------------------------------------*
  254.     
  255. GetLine:    bsr    SetupScreen
  256.     bsr    OpenProject0Window    
  257.     
  258.     move.l    Project0Wnd,a0
  259.     Move.l    wd_UserPort(a0),_MyWinUserPort
  260.  
  261.     *-----------------------------------------------*
  262.  
  263. .WaitLoop    Move.l    _MyWinUserPort,A0
  264.     CALLEXEC    WaitPort
  265.     Move.l    _MyWinUserPort,A0
  266.     CALLGAD    GT_GetIMsg
  267.     Move.l    D0,A1
  268.     Move.l    im_Class(A1),D2    ;D2=IDCMP Flags Directly
  269.     Move.w    im_Code(A1),D3    ;D3=Data ie key why class=Rawkey
  270.     Move.w    im_Qualifier(A1),D4    ;D4=things like CTRL SHIFT
  271.     Move.w    im_MouseX(a1),D5    ;D5=MouseX Coordinate
  272.     Move.w    im_MouseY(a1),D6    ;D5=MouseY Coordinate
  273.     Move.l    im_IAddress(A1),D7    ;D7=Addres of Intuition Obj ie Gadget
  274.     Movem.l    D0-D7/A0-A6,-(A7)
  275.     CALLGAD    GT_ReplyIMsg
  276.     Movem.l    (a7)+,D0-D7/A0-A6
  277.  
  278.     cmp.l    #GADGETUP,d2
  279.     beq    .exit
  280.  
  281.     Cmp.l    #CLOSEWINDOW,D2
  282.     bne    .WaitLoop
  283.     
  284. .exit    move.l    Project0Gadgets+(0*4),a0
  285.     move.l    80(a0),a0
  286.     lea    Pat_Src,a1
  287. .loop    move.b    (a0),d0
  288.     cmp.b    #"a",d0
  289.     blt    .upper
  290.     cmp.b    #"z",d0
  291.     bgt    .upper
  292.     and.b    #223,d0    
  293. .upper    move.b    d0,(a1)+
  294.     tst.b    (a0)+
  295.     bne    .loop
  296.  
  297.     move.l    #Pat_Src,d1
  298.     move.l    #Pat_Dest,d2
  299.     move.l    #256,d3
  300.     CALLDOS    ParsePattern
  301.     
  302.     bsr    CloseProject0Window
  303.     bsr    CloseDownScreen
  304.  
  305.     Move.l    Scr,A0
  306.     CALLINT    CloseScreen
  307.     rts
  308.         
  309.     *-----------------------------------------------*
  310.  
  311.     include    dh0:data/pw/data/DWpat.s
  312.     
  313.     *-----------------------------------------------*
  314.  
  315. _IntuitionBase    dc.l    0
  316. _DOSBase        dc.l    0
  317. _GfxBase        dc.l    0
  318. _GadToolsBase    dc.l    0
  319.  
  320. _MyWinUserPort    dc.l    0
  321.  
  322. GFXName        GRAFNAME
  323. IntName        INTNAME
  324. DosName        DOSNAME
  325. GadToolsName    dc.b    "gadtools.library",0
  326.         even
  327.  
  328. Temp:        dc.l    0
  329.  
  330.         end